跳到主要内容

关系(二维表)的设计规范,范式

范式,NF,normal format,就是指对表的结构的要求!

目的:1,规范结构!2,减少数据冗余!

第一范式,1NF,字段原子性
--------------

要求字段不能再分,要求字段的原子性

![](56D4C305F8540724A0771781050CF841.png)

第二范式,2NF,非部分依赖
--------------

增加唯一主键即可!ID

范式的要求,是逐渐递增!

在 满足 了 第一范式的前提下,不能出现部分依赖!

部分依赖指的是:普通字段 对 主键 是完全依赖的,而不应该是依赖主键的一部分!

依赖:可以通过那个 字段去决定另一个字段

因此,出现主键部分依赖的前提是,出现 复合主键!

![](1059B3C590C9454BE7158E3A9EB8A7FE.png)

其中代课时间,开始和结束时间,没有部分依赖!称之为完全依赖于主键:

但是,性别,依赖于 讲师 字段 即可!

讲师字段是 主键的一部分!因此称之为 性别 部分依赖于 主键

![](AE4251693DA4029C2E5A8FF4C5EA3DD2.png)

因此,该表不符合第二范式!

怎么做?

消灭复合主键即可!增加一个唯一字段的主键即可。增加一个与业务逻辑毫无关系的,唯一的ID主键,int unsigned primary key auto\_increment

![](16D3115E112462B562914EC7D9B7FF5F.png)

第三范式,3NF,非依赖传递
--------------

在满足第二范式的前提下,取消 传递依赖,就是第三范式!

传递依赖:如果 字段B对字段A有依赖,而字段C对字段B存在依赖。则出现了传递依赖!

讲师依赖于ID,而性别依赖于讲师。

班级依赖于ID,而教室依赖于班级。

![](4DA33FF319878FFE9A18F9AA0374C0EE.png)

称之为传递依赖!

解决,要保证所有的字段都完全依赖于主键,而不依赖于其他字段!

将 独立的实体信息,使用独立的关系(二维表)进行保存!

分别增加 讲师,班级表,将代课信息内的讲师和班级信息拆分出:

![](1CCE76CC826A086A0BBF2F4D56A4276F.png)

总结:

每个实体建立一个表,为每个表增加一个主键ID即可!

一个实体表应该如何设计